// main.js
import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'

// 创建 Pinia 实例
const pinia = createPinia()
// 创建 Vue 实例
const app = createApp(App)
// 挂载 Pinia
app.use(pinia)
// 挂载应用
app.mount('#app')

// 导入 store
import { useStore } from './store'
const store = useStore()

//1. 初始化时校验（拦截直接输入URL的情况）
function checkLoginStatus() {
  // 获取完整URL的路径部分
  const fullPath = window.location.pathname;
  
  // 定义需要移除的固定前缀
  const prefixToRemove = '/wxRtss/wxMp/wxQueue';
  
  // 移除前缀，得到相对页面路径
  let currentPath = fullPath.startsWith(prefixToRemove) 
    ? fullPath.slice(prefixToRemove.length)  // 从前缀后开始截取
    : fullPath;  // 如果没有前缀，直接使用原路径
  
  // 处理可能的空路径或根路径（避免白名单匹配问题）
  if (currentPath === '' || currentPath === '/') {
    currentPath = '/pages/index/index';  // 替换为你的首页路径（根据实际情况调整）
  }
  
   // 关键：将当前路径转为小写（统一大小写）
    const currentPathLower = currentPath.toLowerCase();
    
    // 白名单也转为小写后再判断是否包含（忽略大小写）
    const isInWhiteList = whiteList.some(whitePath => {
      return whitePath.toLowerCase() === currentPathLower;
    });
    
    // 调试打印
    console.log('处理后路径：', currentPath);
    console.log('是否在白名单（忽略大小写）：', isInWhiteList);
    
    // 校验逻辑
    if (!store.isLogin && !isInWhiteList) {
      uni.setStorageSync('redirectPath', currentPath);
      uni.reLaunch({ url: '/pages/login/login' });
    }
}

// 2. 定义白名单（和之前保持一致）
const whiteList = [
  '/pages/login/login',
  '/pages/Queue/manager',
  '/pages/History/history',
  '/pages/QueueFront/manager',
  '/pages/HistoryFront/history',
  '/pages/Queue/queue',
  '/pages/Queue/queueGet',
  '/pages/QueueFront/queue'
];

// 3. 拦截 uni-app 导航 API（原逻辑保持不变）
['navigateTo', 'redirectTo', 'reLaunch'].forEach(method => {
  uni.addInterceptor(method, {
    invoke(args) {
      const targetPath = args.url.split('?')[0]
      if (!store.isLogin && !whiteList.includes(targetPath)) {
        uni.setStorageSync('redirectPath', args.url)
        uni.navigateTo({ url: '/pages/login/login' })
        return false
      }
    }
  })
})

// 4. 应用初始化时执行一次登录校验（关键：拦截直接输入URL）
checkLoginStatus()

//在main.js中添加请求拦截器（可放在现有代码下方）
uni.addInterceptor('request', {
  // 响应拦截
  success(args) {
    const { statusCode, data } = args
    // 检查是否为401状态码（根据实际接口返回格式调整）
    if (statusCode === 401) {
      // 清除登录状态
      store.$patch({ isLogin: false })
      // 记录当前页面路径，用于登录后跳转回来
      const currentPath = getCurrentPagePath()
      uni.setStorageSync('redirectPath', currentPath)
      // 跳转到登录页
      uni.reLaunch({ url: '/pages/login/login' })
    }
  },
  // 错误处理（如网络错误等）
  fail(err) {
    console.error('请求失败:', err)
  }
})

// 辅助函数：获取当前页面路径（包含参数）
function getCurrentPagePath() {
  const pages = getCurrentPages()
  const currentPage = pages[pages.length - 1]
  const { route, options } = currentPage
  // 拼接路径和参数
  const params = Object.entries(options).map(([key, value]) => `${key}=${value}`).join('&')
  return params ? `/${route}?${params}` : `/${route}`
}

// 添加请求拦截器
uni.addInterceptor('request', {
  // 请求发送前的处理
  invoke(args) {
    // 从store或本地存储中获取Token
    const token = store.token || uni.getStorageSync('token')
    
    // 如果Token存在，添加到请求头
    if (token) {
      // 初始化header（避免未定义的情况）
      args.header = args.header || {}
      // 添加Bearer Token（注意格式：Bearer + 空格 + Token）
      args.header.Authorization = `Bearer ${token}`
    }
  },
  // 请求失败的处理（可选）
  fail(err) {
    console.error('请求失败:', err)
  }
})